There are a number of known techniques for producing computer programs. The classical technique is to produce a program as a sequential list of instructions to be executed by the computer. More recently so called `Object Oriented Programming` (OOP) languages and programs have been developed. Examples of such programming languages are Smalltalk and C++. An example of an OOP program is the Presentation Manager part of the Operating System/2 program produced by International Business Machines Corporation (Presentation Manager and Operating System/2 are trademarks of International Business Machines Corporation). One way of defining an OOP program is that with OOP both the data and the code that manipulates that data are compartmentalized into so called objects. These objects interact by exchanging messages which may comprise data, instructions or both. There are strong advantages in producing computer programs in such a manner, e.g. it becomes easier to make minor changes to a program for maintenance or updating purposes (the effects are localized), and objects from one program may be reused in another program reducing the work needed to produce new programs. It will be appreciated that compartmentalizing a program in this way introduces a heavy dependence upon messages being passed between the objects.
The types of languages and programs available fall into two categories; statically bound languages such as C++ and dynamically bound languages such as Smalltalk. With a program written in Smalltalk a name or pointer to the destination of each message is included within the program, but the precise location of that message is determined at the time the message is generated (run time determination of message destination). This can be contrasted with the compiled programs in which the precise destination of each message is determined when the program is complied so that no such processing need be carried out whilst the compiled program is running. Dynamic binding allows greater flexibility but incurs a performance penalty, whereas compiled programs run faster but are less flexible.
Another subdivision can be drawn between different types of dynamic binding. One known technique is for the program to have its own specific message handling routine which is called directly (an example of such an approach is given in Brad Cox's book `OOP an Evolutionary Approach`). This technique is comparatively fast, but means that a separate way of sending nonstandard messages such as user input to objects within the program must be provided.
An alternative is to use a system messaging technique. When working with a computer running an operating system which provides system messaging for applications then these facilities can be used by the OOP program which then need not have its own specific message handling routine. An example of this later environment is the Presentation Manager portion of the Operating System/2 computer program mentioned above. This technique provides an elegant way of bringing system supplied messages into the program, but suffers from the disadvantage of being relatively slow compared to using a message handling routine within the OOP program itself.